package com.tangtang.designpatterns.factory;

import com.tangtang.designpatterns.factory.config.JsonRuleConfigParser;
import com.tangtang.designpatterns.factory.config.PropertiesRuleConfigParser;
import com.tangtang.designpatterns.factory.config.IRuleConfigParser;
import com.tangtang.designpatterns.factory.config.RuleConfig;
import com.tangtang.designpatterns.factory.config.XmlRuleConfigParser;
import com.tangtang.designpatterns.factory.config.YamlRuleConfigParser;

public class RuleConfigSource {
  public RuleConfig load(String ruleConfigFilePath) throws InvalidRuleConfigException {
    String ruleConfigFileExtension = getFileExtension(ruleConfigFilePath);
    IRuleConfigParser parser = null;
    if ("json".equalsIgnoreCase(ruleConfigFileExtension)) {
      parser = new JsonRuleConfigParser();
    } else if ("xml".equalsIgnoreCase(ruleConfigFileExtension)) {
      parser = new XmlRuleConfigParser();
    } else if ("yaml".equalsIgnoreCase(ruleConfigFileExtension)) {
      parser = new YamlRuleConfigParser();
    } else if ("properties".equalsIgnoreCase(ruleConfigFileExtension)) {
      parser = new PropertiesRuleConfigParser();
    } else {
      throw new InvalidRuleConfigException("Rule config file format is not supported: " + ruleConfigFilePath);
    }
    String configText = "";
    //从ruleConfigFilePath文件中读取配置文本到configText中
    RuleConfig ruleConfig = parser.parse(configText);
    return ruleConfig;
  }
  private String getFileExtension(String filePath) {
    //...解析文件名获取扩展名，比如rule.json，返回json
    return "json";
  }
}